//package com.kk.gray.gateway;
//
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.cloud.context.config.annotation.RefreshScope;
//import org.springframework.cloud.gateway.filter.GatewayFilterChain;
//import org.springframework.cloud.gateway.filter.GlobalFilter;
//import org.springframework.core.Ordered;
//import org.springframework.http.server.reactive.ServerHttpRequest;
//import org.springframework.http.server.reactive.ServerHttpResponse;
//import org.springframework.stereotype.Component;
//import org.springframework.util.StringUtils;
//import org.springframework.web.server.ServerWebExchange;
//import reactor.core.publisher.Mono;
//
//import java.util.List;
//
//@Component
//@RefreshScope
//public class GrayscaleGlobalFilter implements GlobalFilter, Ordered {
//    @Value("${gateway.grayscaleUserConfig}")
//    private String[] grayscaleUserConfig;
//    @Value("${gateway.grayscale.version}")
//    private String grayscaleVersion;
//    @Value("${gateway.formal.version}")
//    private String formalVersion;
//
//
//    @Override
//    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//        // 1.获取到ServerHttpRequest
//        ServerHttpRequest request = exchange.getRequest ( );
//        ServerHttpResponse response = exchange.getResponse ( );
//
//        // 2.判断是否是灰度用户 根据参数判断
//        List<String> mayiktParameGrayscales = request.getHeaders ( ).get ("mayiktParameGrayscale");
//        if (mayiktParameGrayscales != null && mayiktParameGrayscales.size ( ) > 0) {
//            // 3.如果是灰度用户
//            grayscale (mayiktParameGrayscales);
//        } else {
//            // 设置当前环境为正式环境
//            GrayscaleThreadLocalEnvironment.setCurrentEnvironment (formalVersion);
//        }
//        return chain.filter (exchange.mutate ( ).request (request).build ( ));
//    }
//
//    /**
//     * 灰度流程
//     */
//    private void grayscale(List<String> mayiktParameGrayscales) {
//        String mayiktParameGrayscale = mayiktParameGrayscales.get(0);
//        if (StringUtils.isEmpty(mayiktParameGrayscale)) {
//            return;
//        }
//        for (String userConfig :
//                grayscaleUserConfig) {
//            if (userConfig.equals(mayiktParameGrayscale)) {
//                // 设置当前用户灰度的环境
//                GrayscaleThreadLocalEnvironment.setCurrentEnvironment(grayscaleVersion);
//                return;
//            }
//        }
//        // 设置当前环境为正式环境
//        GrayscaleThreadLocalEnvironment.setCurrentEnvironment(formalVersion);
//    }
//
//    public int getOrder() {
//        return -1;
//    }
//
//    static class GrayscaleThreadLocalEnvironment {
//        private static ThreadLocal<String> threadLocal = new ThreadLocal<String> ( );
//
//        /**
//         * 设置当前线程对应的版本
//         *
//         * @param currentEnvironmentVsersion
//         */
//        public static void setCurrentEnvironment(String currentEnvironmentVsersion) {
//            threadLocal.set (currentEnvironmentVsersion);
//        }
//
//        /**
//         * 获取当前环境配置
//         *
//         * @return
//         */
//        public static String getCurrentEnvironment() {
//            return threadLocal.get ( );
//        }
//    }
//
//}
//
//
